home *** CD-ROM | disk | FTP | other *** search
/ Softdisk G-S 98 / SGDS 98.2mg / SDGS.98 / SDA98 / A / CRIBBAGE.PGM (.txt) < prev    next >
Encoding:
Applesoft BASIC Source Code  |  1989-10-13  |  18.8 KB  |  453 lines  |  [FC] Applesoft BASIC Program (0x0801)

  1. 0  REM ********************** 
  2. 1  REM *      CRIBBAGE      *
  3. 2  REM *                    *
  4. 3  REM * BY  PETER ROKITSKI *
  5. 8  REM **********************
  6. 10  GOTO 9000
  7. 19  REM DRAW A CARD. SET X,Y,VA AND SU & CALL PROPERROUTINE. 20-BLANK. 21-HOLD. 22-SHUFFLE. 23-FRONT. 24-BACK
  8. 20 ML = 0: HCOLOR= 4: GOTO 25
  9. 21 ML = 3: GOTO 25
  10. 22 ML = 6: GOTO 25
  11. 23 ML = 9: GOTO 25
  12. 24 ML = 12
  13. 25  POKE 1,X/256: POKE 2,Y: POKE 0,X -256 * PEEK(1): POKE 3,VA: POKE 4,SU: IF ML = 3  THEN  POKE 4,0
  14. 26  CALL ML +4400: RETURN 
  15. 29  REM CENTER P$ ON LINE V, THEN DELAY, THEN CLEAR
  16. 30  GOSUB 40: FOR WD = 0 TO DD *DD *600 +200: IF  PEEK(49152) >127  THEN WD = 1E6
  17. 35  NEXT 
  18. 36 P$ = " ": IF  PEEK(49152) = 155  THEN 8990
  19. 39  REM CENTER P$ ON LINE V
  20. 40  VTAB V: HTAB 1:WD = 40 - LEN(P$): PRINT  SPC( WD/2)P$ SPC( (WD +1)/2);: RETURN 
  21. 49  REM ADD THE SCORE TO THE TOTAL. SHOW HOW IF REQUESTED
  22. 50  POKE 49168,0:TS = TS +SC(S): IF   NOT WS  THEN  RETURN 
  23. 60 P$ = SC$(S): POKE SN -2,7: IF S >2  THEN 70
  24. 63  IF S = 1  THEN P$ = P$ +" " +FI$(TS/2): GOSUB 6530: GOSUB 30: POKE SN -2,4: GOTO 6530
  25. 65 S = TS: GOTO 8500
  26. 70 S1 = (S >13) +1:S = SC(S): ON S1 GOSUB 6500,6510: GOSUB 8500: POKE SN -2,4: ON S1 GOTO 6500,6510
  27. 78  REM COUNT HAND SCORE. SET BY P: 0-PTG, 1-PLAYERS, 2-CRIB
  28. 79  REM FIFTEENS
  29. 80 C(P,0,4) = SV: FOR I = 0 TO 4:VA = C(P,0,I): IF VA >10  THEN VA = 10
  30. 90 SH(I) = VA: NEXT :N = 1:S = 1:TS = 0:L = 0:K = 0
  31. 100  FOR I = 0 TO 3: FOR J = I +1 TO 4: IF SH(I) +SH(J) = 15  THEN  GOSUB 50
  32. 110  NEXT : NEXT : FOR I = 0 TO 2: FOR J = I +1 TO 3: FOR K = J +1 TO 4: IF SH(I) +SH(J) +SH(K) = 15  THEN  GOSUB 50
  33. 120  NEXT : NEXT : NEXT 
  34. 140  FOR I = 0 TO 1: FOR J = I +1 TO 2: FOR K = J +1 TO 3: FOR L = K +1 TO 4:T = SH(I) +SH(J) +SH(K) +SH(L): IF T = 15  THEN  GOSUB 50
  35. 150  NEXT : NEXT : NEXT : NEXT : IF T +SH(0) = 15  THEN  GOSUB 50
  36. 160  IF TS  THEN S = 2: GOSUB 50
  37. 169  REM COUNT THE NUMBER OF EACH CARD; FIND LOWEST AND HIGHEST CARDS
  38. 170  FOR I = 1 TO 13:SH(I) = 0: NEXT : FOR I = 0 TO 3:SH(C(P,0,I)) = SH(C(P,0,I)) +1: NEXT :SH(SV) = SH(SV) +1
  39. 180  FOR I = 1 TO 13: IF SH(I)  THEN J1 = I:I = 13
  40. 190  NEXT : FOR I = 13 TO 1  STEP  -1: IF SH(I)  THEN J2 = I:I = 1
  41. 200  NEXT :M = 0: FOR I = J1 TO J2: IF SH(I) >M  THEN M = SH(I):L = I
  42. 205  NEXT : IF M = 1  THEN 270
  43. 209  REM DOUBLE PAIR ROYAL
  44. 210  IF M = 4  THEN J1 = L:J2 = L:S = 3: GOSUB 50: GOTO 460
  45. 219  REM QUADRUPLE RUN OF 3, THEN TRIPLE RUN OF 3
  46. 220  IF (J2 -J1 < >2)  OR   NOT SH(J1 +1)  THEN 250
  47. 230  IF SH(J1) = 2  OR SH(J2) = 2  THEN S = 4: GOSUB 50: GOTO 460
  48. 240 S = 5: GOSUB 50: GOTO 460
  49. 249  REM PAIR ROYAL
  50. 250  IF M = 3  THEN J1 = L:J2 = L:S = 6: GOSUB 50: GOTO 400
  51. 269  REM DOUBLE RUN OF 4, THEN RUN OF 5
  52. 270  IF J2 -J1 = 3  AND SH(J1 +1)  AND SH(J2 -1)  THEN S = 7: GOSUB 50: GOTO 440
  53. 280  IF J2 -J1 = 4  AND M = 1  THEN S = 8: GOSUB 50: GOTO 420
  54. 289  REM DOUBLE RUN OF 3, RUN OF 4, RUN OF 3
  55. 290  IF   NOT SH(J1 +1)  OR   NOT SH(J1 +2)  THEN 330
  56. 300  IF M = 2  AND SH(J2) < >2  THEN S = 9:J2 = J1 +2: GOSUB 50: GOTO 440
  57. 310  IF SH(J1 +3)  THEN S = 10:J2 = J1 +3: GOSUB 50: GOTO 420
  58. 320 J2 = J1 +2:S = 11: GOSUB 50: GOTO 400
  59. 329  REM DOUBLE RUN OF 3, RUN OF 4, RUN OF 3
  60. 330  IF   NOT SH(J2 -1)  OR   NOT SH(J2 -2)  THEN 370
  61. 340  IF M = 2  AND SH(J1) < >2  THEN S = 9:J1 = J2 -2: GOSUB 50: GOTO 440
  62. 350  IF SH(J2 -3)  THEN S = 10:J1 = J2 -3: GOSUB 50: GOTO 420
  63. 360 J1 = J2 -2:S = 11: GOSUB 50: GOTO 400
  64. 369  REM RUN OF 3
  65. 370  IF M = 2  THEN 400
  66. 380  FOR I = J1 +2 TO J2: IF SH(I)  THEN J1 = I:I = J2
  67. 390  NEXT :J2 = J1 +2: IF SH(J1 +1)  AND SH(J1 +2)  THEN S = 11: GOSUB 50
  68. 399  REM PAIRS
  69. 400  FOR I = 1 TO 13:S = 12: IF SH(I) = 2  THEN J1 = I:J2 = I: GOSUB 50
  70. 410  NEXT 
  71. 419  REM FLUSH
  72. 420 J1 = 1:J2 = 13: IF M >1  THEN 440
  73. 430  IF SS = C(P,1,0)  AND SS = C(P,1,1)  AND SS = C(P,1,2)  AND SS = C(P,1,3)  THEN S = 13: GOSUB 50: GOTO 460
  74. 439  REM FOUR FLUSH
  75. 440 J1 = 1:J2 = 13: IF M >2  OR P = 2  THEN 460
  76. 450  IF C(P,1,0) = C(P,1,1)  AND C(P,1,2) = C(P,1,3)  AND C(P,1,0) = C(P,1,3)  THEN S = 14: GOSUB 50
  77. 459  REM HIS NOB
  78. 460  FOR I = 0 TO 3: IF C(P,0,I) < >11  OR C(P,1,I) < >SS  THEN  NEXT : GOTO 490
  79. 470 J = I:I = 3: NEXT :TS = TS +1: IF   NOT WS  THEN 490
  80. 480  POKE 49168,0:P$ = SC$(15):S = 1: POKE SN -2,7:X = 40 *J +83:Y = OY:SU = SS:VA = 11: GOSUB 23: GOSUB 8500: POKE SN -2,4:Y = OY: GOSUB 23
  81. 490 P$ = "THIS HAND": IF P = 2  THEN P$ = "THE CRIB"
  82. 500  IF   NOT TS  THEN P$ = P$ +" IS WORTH NOTHING!!!": GOSUB 30: GOTO 520
  83. 510  IF   NOT WS  THEN S = TS:P$ = P$ +" IS WORTH": GOSUB 8500
  84. 520  FOR I = 0 TO 3:X = I *40 +83:Y = OY: GOSUB 20: NEXT : POKE SN -2,7:TS = 0: RETURN 
  85. 548  REM DETERMINE CARDS PTG SHOULD KEEP
  86. 549  REM COUNT SCORE OF 4 KEPT CARDS
  87. 550 P$ = "...LET ME SEE HERE...": GOSUB 40: FOR I = 0 TO 14: FOR J = 0 TO 3: POKE J,C(0,0,C%(I,J)): NEXT : CALL 8000:S =  PEEK(8183)
  88. 560  IF C(0,1,C%(I,0)) = C(0,1,C%(I,1))  AND C(0,1,C%(I,2)) = C(0,1,C%(I,3))  AND C(0,1,C%(I,0)) = C(0,1,C%(I,3))  THEN S = S +4
  89. 569  REM DETERMINE ACTUAL OR EXPECTED VALUE OF 2 CRIB CARDS
  90. 570 C%(I,6) = S *100:S1 = C(0,0,C%(I,4)):S2 = C(0,0,C%(I,5)):S = 0: IF S1 = S2  THEN S = 2
  91. 571 T =  ABS(S1 -S2): IF T = 1  THEN S = S +1.56
  92. 572  IF T = 2  THEN S = S +.78
  93. 573  IF T = 3  THEN S = S +.1
  94. 574  IF T = 4  THEN S = S +.01
  95. 575  IF C(0,1,C%(I,4)) = C(0,1,C%(I,5))  THEN S = S +.05
  96. 576  IF S1 = 11  THEN S = S +.25
  97. 577  IF S2 = 11  THEN S = S +.25
  98. 578  IF S1 = 5  THEN S = S +.7
  99. 579  IF S2 = 5  THEN S = S +.7
  100. 580 S1 = S1 -(S1 -10) *(S1 >10):S2 = S2 -(S2 -10) *(S2 >10): IF S1 +S2 = 15  THEN S = S +2
  101. 581  IF S1 +S2 = 5  THEN S = S +.7
  102. 582 C%(I,7) = S *100: NEXT 
  103. 589  REM USE ACTUAL VALUE OF HAND & EXPECTED VALUE OF CRIB & CURRENT SCORE AND DEALER TO DETERMINE CARDS TO KEEP
  104. 590 J =  -1: FOR I = 0 TO 14: IF C%(I,6)/100 +S%(0,2) >120  THEN J = I:I = 15
  105. 600  NEXT : IF J > -1  THEN 680
  106. 610  IF   NOT DL  THEN 670
  107. 620 M =  -1: FOR I = 0 TO 14:S = C%(I,6): IF S >M  THEN M = S:J = I
  108. 630  NEXT : IF M >600  THEN 676
  109. 640  IF M >200  AND S%(1,2) >99  THEN 676
  110. 670 T = (DL = 0) -(DL = 1):M = 0: FOR I = 0 TO 14:S = C%(I,6) +C%(I,7) *T: IF S >M  THEN M = S:J = I
  111. 675  NEXT : GOTO 680
  112. 676 T = 99: FOR I = 0 TO 14: IF C%(I,6) = M  AND C%(I,7) <T  THEN T = C%(I,7):J = I
  113. 677  NEXT 
  114. 680 C(2,0,0) = C(0,0,C%(J,4)):C(2,1,0) = C(0,1,C%(J,4)):C(0,0,C%(J,4)) = 0:C(2,0,1) = C(0,0,C%(J,5)):C(2,1,1) = C(0,1,C%(J,5)):C(0,0,C%(J,5)) = 0
  115. 690 J = 5: FOR I = 5 TO 2  STEP  -1:C(0,0,I) = C(0,0,J):C(0,1,I) = C(0,1,J): IF   NOT C(0,0,I)  THEN I = I +1
  116. 700 J = J -1: NEXT :PL = DL:C(0,0,0) =  -1:C(0,0,1) =  -1:SU = 1:VA = 1:TS = 0
  117. 710 X = 3:Y = 32: GOSUB 20:X = 245:Y = CY: GOSUB 24:X = 43:Y = 32: GOSUB 20:X = 245:Y = CY: GOSUB 24:B = 0:NC = 6:X = 40 *B +3:Y = 128: GOSUB 21
  118. 720 P$ = "NOW YOU LAY-AWAY TWO CARDS.": GOTO 40
  119. 798  REM DETERMINE CARD FOR PTG TO PLAY
  120. 799  REM SEE IF ANY OF THE 'GO' CONDITIONS APPLY, IF NOT, THEN DETERMINE LOGIC TO BE USED TO PLAY THIS CARD
  121. 800  IF   NOT GO  THEN  RETURN 
  122. 810  IF   NOT NR  AND GO =  -1  THEN GO = 0: RETURN 
  123. 820  IF   NOT NR  THEN 8300
  124. 830  POKE 49168,0: IF   NOT NC  AND NR = 3  THEN 1300
  125. 840  IF   NOT TS  THEN 1100
  126. 849  REM LOGIC FOR A NON-LEAD CARD
  127. 850  FOR I = 2 TO 5:S = 0:VA = C(0,0,I):SU = VA -(VA -10) *(VA >10): IF VA <0  THEN S =  -8: GOTO 1020
  128. 860  IF TS +SU >31  THEN S =  -7: GOTO 1020
  129. 869  REM PAIR OR PAIR ROYAL?
  130. 870  IF VA = P(CP)  THEN S = 2
  131. 880  IF S = 2  AND CP >1  THEN  IF VA = P(CP -1)  THEN S = 6
  132. 890  IF S  THEN 1000
  133. 899  REM RUN?
  134. 900  FOR J = 1 TO 13:C%(J,6) = SH(J): NEXT : IF SH(VA)  THEN  FOR J = 1 TO 13:SH(J) = SH(J) *(SH(J) =  >SH(VA)): NEXT 
  135. 910 CP = CP +1:P(CP) = VA:SH(VA) = CP:PG = 1: GOSUB 7300:CP = CP -1:PG = 0: FOR J = 1 TO 13:SH(J) = C%(J,6): NEXT : IF S  THEN 1000
  136. 930  IF  ABS(C(0,0,I) -P(CP)) <3  THEN S =  -1
  137. 999  REM 15 OR 31 (GOOD), 5 OR 21 (BAD)
  138. 1000  IF TS +SU = 15  OR TS +SU = 31  THEN S = S +2
  139. 1010  IF TS +SU = 5  OR TS +SU = 21  THEN S = S -1
  140. 1020 C%(I,7) = S: NEXT 
  141. 1030 M =  -9: FOR I = 2 TO 5: IF C%(I,7) >M  THEN M = C%(I,7):J = I
  142. 1040  NEXT : IF M =  -7  THEN VA = 1:SU = 1: GOTO 8300
  143. 1050  IF M >0  THEN 1400
  144. 1060  FOR I = 2 TO 5: IF C(0,0,I) >M  AND C%(I,7) > -1  THEN M = C(0,0,I):J = I
  145. 1070  NEXT : GOTO 1400
  146. 1099  REM LEAD CARD
  147. 1100  FOR I = 2 TO 5:S = 0:VA = C(0,0,I): IF VA <0  THEN S =  -8: GOTO 1190
  148. 1110  FOR J = 2 TO 5: IF I = J  THEN 1130
  149. 1120 VA = VA -(VA -10) *(VA >10):SU = C(0,0,J):SU = SU -(SU -10) *(SU >10): IF VA +SU = 15  OR VA +VA +SU = 15  THEN S = S +2:J = 5
  150. 1130  NEXT : IF S  AND (VA <7  OR VA >8)  THEN 1160
  151. 1140  FOR J = 2 TO 5: IF C(0,0,J) = 6  OR C(0,0,J) = 9  THEN S = S +1:J = 5
  152. 1150  NEXT 
  153. 1160  FOR J = 2 TO 5: IF C(0,0,I) = C(0,0,J)  AND I < >J  THEN S = S +2:J = 5
  154. 1170  NEXT : IF VA = 5  THEN S = S -5
  155. 1180  IF VA >1  AND VA <5  THEN S = S +1 +4 *(S%(1,2) >100)
  156. 1190 C%(I,7) = S: NEXT 
  157. 1200 M =  -9: FOR I = 2 TO 5: IF C%(I,7) >M  THEN M = C%(I,7):J = I
  158. 1210  NEXT : GOTO 1400
  159. 1299  REM HOW TO PLAY WHEN PTG HAS 3 CARDS, AND PLAYER HAS NONE
  160. 1300  FOR I = 2 TO 5:S =  -8 +5 *(C(0,0,I) >0): FOR J = 2 TO 5: IF C(0,0,I) = C(0,0,J)  AND C(0,0,I) >0  AND I < >J  THEN S =  -5
  161. 1310  NEXT :C%(I,7) = S: NEXT :M =  -9: FOR I = 2 TO 5: IF C%(I,7) >M  THEN M = C%(I,7):J = I
  162. 1320  NEXT 
  163. 1399  REM PLAY SELECTED CARD
  164. 1400 VA = 1:SU = 1:X = 40 *J +3:Y = 32: GOSUB 20:VA = C(0,0,J):SU = C(0,1,J):X = 3 +14 *(4 -NR): GOSUB 23:NR = NR -1:C(0,0,J) =  -VA:S = 0: GOTO 7050
  165. 5099  END 
  166. 6399  REM GET YES/NO (1/0)
  167. 6400  GOSUB 40: GET A$: IF A$ = "Y"  OR A$ =  CHR$(121)  THEN AN = 1: GOTO 36
  168. 6410 AN = (A$ < >"N"  AND A$ < > CHR$(110)): ON AN +1 GOTO 36,6400
  169. 6499  REM DETERMINE CARDS TO HIGHLIGHT WHEN SHOWING SCORING
  170. 6500 VA = SV:SU = SS:X = 245:Y = 80: IF VA =  >J1  AND VA < = J2  THEN  GOSUB 23
  171. 6510  FOR Q = 0 TO 3:X = 83 +40 *Q:Y = OY:VA = C(P,0,Q):SU = C(P,1,Q): IF VA =  >J1  AND VA < = J2  THEN  GOSUB 23
  172. 6520  NEXT : RETURN 
  173. 6530  IF   NOT L  THEN 6550
  174. 6531  IF L = 5  THEN 6500
  175. 6535  IF L = 4  THEN X = 245:Y = 80:VA = SV:SU = SS: GOSUB 23: GOTO 6550
  176. 6540 VA = C(P,0,L):SU = C(P,1,L):X = 83 +40 *L:Y = OY: GOSUB 23
  177. 6550  IF   NOT K  THEN 6570
  178. 6555  IF K = 4  THEN X = 245:Y = 80:VA = SV:SU = SS: GOSUB 23: GOTO 6570
  179. 6560 VA = C(P,0,K):SU = C(P,1,K):X = 83 +40 *K:Y = OY: GOSUB 23
  180. 6570 VA = C(P,0,I):SU = C(P,1,I):X = 83 +40 *I:Y = OY: GOSUB 23:VA = C(P,0,J):SU = C(P,1,J):X = 83 +40 *J:Y = OY
  181. 6580  IF J = 4  THEN X = 245:Y = 80:VA = SV:SU = SS
  182. 6590  GOTO 23
  183. 6899  REM SET-UP TO COUNT HAND SCORE
  184. 6900  FOR I = 0 TO 3:M = 99: FOR J = I TO 3: IF C(P,0,J) <M  THEN M = C(P,0,J):K = J
  185. 6910  NEXT :T = C(P,0,K):C(P,0,K) = C(P,0,I):C(P,0,I) = T:T = C(P,1,K):C(P,1,K) = C(P,1,I):C(P,1,I) = T: NEXT 
  186. 6920 X = 3:Y = OY: IF P = 2  THEN X = 245
  187. 6930  GOSUB 20:J1 = 1:J2 = 13: POKE SN -2,7 -3 *WS: POKE 49168,0: GOSUB 6500: GOTO 80
  188. 6999  REM PLAYER PLAYS A CARD
  189. 7000 VA = C(1,0,B): IF VA <0  THEN VA = 1: RETURN 
  190. 7010  IF TS +VA -(VA -10) *(VA >10) >31  THEN  POKE 768,233: POKE 769,55: POKE 770,55: POKE 771,255: CALL 3973:P$ = "THAT WOULD EXCEED 31!": GOTO 30
  191. 7020 X = 40 *B +3:Y = 128: GOSUB 20: GOSUB 21:X = 3 +14 *(4 -NC):SU = C(1,1,B): GOSUB 23:C(1,0,B) =  -VA:NC = NC -1: IF NC  THEN K = 1: GOSUB 8670
  192. 7049  REM A CARD HAS BEEN PLAYED, UPDATE TOTAL & SEES IF IT SCORES
  193. 7050 CP = CP +1:P(CP) = VA:TS = TS +VA -(VA -10) *(VA >10):T$ =  CHR$(96) + STR$(TS) +"'":P$ = T$: GOSUB 40
  194. 7060  IF SH(VA)  THEN  FOR Q = 1 TO 13:SH(Q) = SH(Q) *(SH(Q) =  >SH(VA)): NEXT 
  195. 7070 SH(VA) = CP:S = 0
  196. 7080  IF TS = 15  OR TS = 31  THEN S = 2: GOSUB 8500
  197. 7090  IF CP = 1  THEN 7130
  198. 7100  IF CP = 2  THEN  GOSUB 7200: GOSUB 8500: GOTO 7130
  199. 7110  IF CP = 3  THEN  GOSUB 7220: GOSUB 8500: GOSUB 7300: GOTO 7130
  200. 7120  GOSUB 7240
  201. 7130  IF CP = 8  AND TS < >31  THEN P$ = "LAST CARD":S = 1: GOSUB 8500: GOTO 9300
  202. 7140  IF CP = 8  THEN 9300
  203. 7150  IF TS = 31  THEN 8370
  204. 7160 PL = 1 -PL: RETURN 
  205. 7199  REM PAIR?
  206. 7200  IF P(CP) = P(CP -1)  THEN S = 2:P$ = "PAIR"
  207. 7210  RETURN 
  208. 7219  REM PAIR ROYAL?
  209. 7220  GOSUB 7200: IF S  AND P(CP -2) = P(CP)  THEN S = 6:P$ = P$ +" ROYAL"
  210. 7230  RETURN 
  211. 7239  REM DOUBLE PAIR ROYAL?
  212. 7240  GOSUB 7220: IF S = 6  AND P(CP) = P(CP -3)  THEN S = 12:P$ = "DOUBLE " +P$
  213. 7250  GOSUB 8500
  214. 7299  REM RUN?
  215. 7300 J1 = 1:J2 = 13: FOR Q = P(CP) TO 1  STEP  -1: IF   NOT SH(Q)  THEN J1 = Q +1:Q = 0
  216. 7310  NEXT : FOR Q = P(CP) TO 13: IF   NOT SH(Q)  THEN J2 = Q -1:Q = 13
  217. 7320  NEXT :T = J2 -J1 +1: FOR Q = CP TO 1  STEP  -1: IF P(Q) <J1  OR P(Q) >J2  OR Q < >SH(P(Q))  THEN T = CP -Q:Q = 0
  218. 7330  NEXT : IF T <3  THEN  RETURN 
  219. 7340 J3 = 0: FOR Q = J1 TO J2: IF SH(Q) <CP -J2 +J1  THEN J3 = Q:Q = J2
  220. 7350  NEXT : IF   NOT J3  THEN T = J2 -J1 +1: GOTO 7390
  221. 7360  IF J3 -J1 >2  THEN J2 = J3 -1: GOTO 7340
  222. 7370  IF J2 -J3 >2  THEN J1 = J3 +1: GOTO 7340
  223. 7380  RETURN 
  224. 7390 P$ = "RUN OF " + STR$(T):S = T: IF   NOT PG  THEN  GOSUB 8500
  225. 7400  RETURN 
  226. 8299  REM A PLAYER SAYS 'GO'
  227. 8300 P$ = "GO": ON GO +1 GOTO 8320,8360
  228. 8310  IF   NOT PL  THEN GO = 0: GOTO 30
  229. 8320  IF   NOT NC  THEN  ON GO +1 GOTO 8350,8360
  230. 8330  FOR T = 2 TO 5:VA = C(1,0,T):VA = VA -(VA -10) *(VA >10):VA = VA *(VA >0): IF TS +VA <32  AND VA < >0  THEN T = 6: NEXT :P$ = "YOU CAN STILL PLAY A CARD!": GOTO 30
  231. 8340  NEXT 
  232. 8350  IF GO =  -1  THEN GO = 1: GOTO 30
  233. 8360 PL = 1 -GO:S = 1: GOSUB 8500
  234. 8370 X = 45:Y = 32: GOSUB 20:Y = 128: GOSUB 20:X = 33: GOSUB 20:Y = 32: GOSUB 20:X = 3: GOSUB 24:Y = 128: GOSUB 24
  235. 8380 TS = 0:T$ = " ": FOR T = 1 TO 13:SH(T) = 0: NEXT :P(CP) = 0:PL = 1 -PL:GO =  -1: RETURN 
  236. 8499  REM MOVE THE PEGS AROUND THE BOARD. PASS PL=0 FOR PTG, PL=1 FOR HUMAN. PASS SCORE TO BE ADDED IN S
  237. 8500  IF S = 0  THEN  RETURN 
  238. 8510 P$ = P$ +" " + CHR$(123) + STR$(S) + CHR$(125): GOSUB 40:SP = 49200 *SO:O = S%(PL,1):S%(PL,1) = S%(PL,2):S%(PL,2) = S%(PL,2) +S: FOR Q = S%(PL,1) +1 TO S%(PL,2): GOSUB 8530: NEXT :S = 0: GOTO 30
  239. 8530  GOSUB 8540: FOR O = 0 TO 5: NEXT :O = Q
  240. 8540 O = O -60 *(O >60):Y = 85 +36 *PL: IF O >30  THEN O = 61 -O:Y = 93 +20 *PL
  241. 8550  IF   NOT O  THEN  RETURN 
  242. 8560  IF Q = 121  THEN 10000
  243. 8570  XDRAW 7 AT 8 *O -4,Y:O =  PEEK(SP):O = Q: RETURN 
  244. 8579  REM LAY AWAY THE PLAYERS TWO CARDS
  245. 8580  IF HO < >2  THEN P$ = "YOU MUST LAY-AWAY TWO CARDS!": GOTO 30
  246. 8590  FOR J = 0 TO 5: IF SH(J)  THEN C(2,0,HO) = C(1,0,J):C(2,1,HO) = C(1,1,J):C(1,0,J) =  -1:HO = 3:X = 3 +40 *J:Y = 128: GOSUB 20:X = 245:Y = CY: GOSUB 24
  247. 8600  NEXT :NC = 4:HO = 0:J = 5: FOR I = 5 TO 2  STEP  -1:C(1,0,I) = C(1,0,J):C(1,1,I) = C(1,1,J): IF C(1,0,I) <0  THEN I = I +1
  248. 8610 J = J -1: NEXT :C(1,0,0) =  -1:C(1,0,1) =  -1:X = 3:Y = 128: GOSUB 20:X = 43: GOSUB 20: FOR I = 2 TO 5:X = 3 +40 *I:VA = C(1,0,I):SU = C(1,1,I): GOSUB 23: NEXT : POP :B = 2: GOTO 9160
  249. 8639  REM HOLD A CARD TO LAY-AWAY
  250. 8640  IF   NOT SH(B)  AND HO = 2  THEN P$ = "2 CARD LIMIT!": GOTO 30
  251. 8650 X = 3 +40 *B:Y = 128:VA = C(1,0,B):SU = C(1,1,B): IF   NOT SH(B)  THEN SH(B) = 1: POKE SNAP -2,4: GOSUB 23: GOSUB 21: POKE SNAP -2,7:HO = HO +1: RETURN 
  252. 8660 HO = HO -1:SH(B) = 0: GOSUB 23: GOTO 21
  253. 8669  REM LEFT AND RIGHT ARROW ROUTINES
  254. 8670 OB = B:IN = 1 -2 *(K = 1)
  255. 8680 B = B +IN:B = B +6 *(B <0):B = B -6 *(B = 6): IF C(1,0,B) <0  THEN 8680
  256. 8690 Y = 128:X = 3 +40 *OB: GOSUB 21:X = 3 +40 *B: GOTO 21
  257. 8699  REM DISPLAY THE HELP-SCREEN
  258. 8700  PRINT "<CTRL-0x04>PR#0": TEXT : HOME : VTAB 1: HTAB 8: PRINT "COMMANDS ALWAYS IN EFFECT": PRINT : PRINT " S  - TOGGLE SOUND ON AND OFF.": PRINT " W  - TOGGLE WATCHING OF HAND SCORING.": PRINT " D  - SET THE MESSAGE DISPLAY DELAY."
  259. 8710  PRINT "<-- - MOVE THE HIGHLIGHT BOX LEFT.": PRINT "--> - MOVE THE HIGHLIGHT BOX RIGHT.": PRINT "ESC - QUIT THE GAME.": PRINT 
  260. 8720  HTAB 9: PRINT "COMMANDS FOR LAYING-AWAY": PRINT : PRINT "SPC - INVERTS THE HIGHLIGHTED CARD.": PRINT " L  - LAYS-AWAY THE TWO INVERTED CARDS."
  261. 8730  PRINT : HTAB 11: PRINT "COMMANDS FOR PLAYING": PRINT : PRINT " P  - PLAY THE HIGHLIGHTED CARD.": PRINT " G  - TELL OPPONENT TO 'GO'.": PRINT "RET - ALTERNATE 'GO' KEY."
  262. 8760 P$ = "PRESS A KEY":V = 23: GOSUB 40: GOSUB 8990: POKE  -16304,0: CALL 2304: POKE 48688, PEEK(0): POKE 48689, PEEK(1):V = 24: RETURN 
  263. 8769  REM SET THE DELAY
  264. 8770 P$ = "DELAY IS NOW " + STR$(DD) +". ENTER NEW DELAY (0-9):": GOSUB 40: GOSUB 8990: IF KP <48  OR KP >57  THEN 8770
  265. 8780 DD = KP -48:P$ = "DELAY IS NOW " + STR$(DD): GOTO 30
  266. 8789  REM TOGGLE WATCHING OF HAND SCORING
  267. 8790 WS = 1 -WS:P$ = "YOU WILL ONLY SEE THE HAND TOTAL SCORE.": IF WS  THEN P$ = "YOU WILL NOW SEE THE HANDS BEING SCORED."
  268. 8800  GOTO 30
  269. 8809  REM TOGGLE SOUND ON AND OFF
  270. 8810 SO =  PEEK(SNAP):SO = 1 -SO: POKE SNAP,SO:SU$(0) = "N.": IF   NOT SO  THEN SU$(0) = "FF."
  271. 8820 P$ = "SOUND IS NOW O" +SU$(0): GOTO 30
  272. 8839  REM SPREAD THE CARDS OUT BELOW THE BOARD AND LET PLAYERS CUT FOR DEAL. N$ RETURNS "YOU" FOR PLAYER DEALER, "I" FOR COMPUTER DEALER
  273. 8840 X = 245:Y = 80: GOSUB 20: FOR I = 0 TO 20: NEXT : POKE SN,0:Y = 128: FOR I = 0 TO 17:X = I *14 +5: GOSUB 24: NEXT :V = 24:P$ = "CUT FOR DEAL. HIT A KEY TO PICK A CARD.": GOSUB 40
  274. 8850  FOR I = 0 TO 51: XDRAW 7 AT I *5,177:P =  PEEK(49152): FOR J = 0 TO 12: NEXT : XDRAW 7 AT I *5,177:I = I -51 *(I = 51):I = I +52 *(P >127): NEXT : POKE SN,SO:VA =  PEEK(DECK +I -53)
  275. 8860  GOSUB 8940:X = 5 *(I -53):Y = 128: GOSUB 23:SV = VA:SS = SU:T =  INT( RND(1) *50) +50:K = I:P$ = "NOW I'LL DRAW ONE...": GOSUB 40:P = 0
  276. 8870  FOR I = 0 TO 51: XDRAW 7 AT I *5,177:P = P +1: FOR J = 0 TO 12: NEXT : XDRAW 7 AT I *5,177:I = I -51 *(I = 51):I = I +52 *(T = P): NEXT : IF I = K  THEN I = I +1
  277. 8880 VA =  PEEK(DECK +I -53): GOSUB 8940:X = 5 *(I -53):Y = 128: GOSUB 23:P = SV -VA: IF   NOT P  THEN SV = SS *100 +SV:VA = SU *100 +VA
  278. 8890 N$ = "YOU": IF VA <SV  THEN N$ = "I"
  279. 8900 P$ = N$ +" DEAL FIRST.": POKE 49168,0: IF P  THEN VA = 1: GOTO 30
  280. 8910 P$ = P$ +" (" +SU$(SS *(SV <VA) +SU *(VA <SV)) +" BEATS " +SU$(SU *(SV <VA) +SS *(VA <SV)) +")":VA = 1: GOTO 30
  281. 8919  REM CLEAR THE TWO AREAS WHERE CARDS ARE DISPLAYED
  282. 8920  FOR I = 245 TO 0  STEP  -24:X = I:Y = 32: GOSUB 20: NEXT : FOR I = 245 TO 0  STEP  -24:X = I:Y = 128: GOSUB 20: NEXT : RETURN 
  283. 8939  REM INTERPRET A VALUE GRABBED FROM THE ML DECK
  284. 8940  FOR WD = 3 TO 0  STEP  -1: IF VA >WD *64  THEN SU = WD +1:VA = VA -WD *64:WD = 0
  285. 8950  NEXT : RETURN 
  286. 8959  REM DRAW THE BOARD
  287. 8960  CALL BOARD: HCOLOR= 7: HPLOT 0,80 TO 239,80 TO 239,126 TO 0,126 TO 0,80: HCOLOR= 4: FOR I = 240 TO 244: HPLOT I,80 TO I,126: NEXT : FOR I = 40 TO 239  STEP 40: HPLOT I,81 TO I,125: NEXT : HPLOT 2,98 TO 237,98: HPLOT 2,108 TO 237,108: GOSUB 8970: GOTO 8980
  288. 8969  REM DRAW THE SCORING HOLES
  289. 8970 SP = 49200 *SO: FOR I = 4 TO 240  STEP 8: DRAW 7 AT I,85:J =  PEEK(SP): DRAW 7 AT I,93:J =  PEEK(SP): DRAW 7 AT I,113:J =  PEEK(SP): DRAW 7 AT I,121:J =  PEEK(SP): NEXT : RETURN 
  290. 8979  REM DRAW THE GAME HOLES
  291. 8980  FOR I = 0 TO 9: DRAW 7 AT I *8 +4,103:J =  PEEK(SP): DRAW 7 AT 236 -8 *I,103:J =  PEEK(SP): NEXT : RETURN 
  292. 8989  REM GET A KEYPRESS. RETURNS ASCII VALUE IN P. UPPER CASE IS CONVERTED TO LOWER CASE
  293. 8990  FOR KP = 0 TO 127:KP =  PEEK(49152): NEXT : POKE 49168,0:KP = KP -129:KP = KP -32 *(KP >96):KP = KP +9 *(KP <0): IF KP < >27  OR PE  THEN PE = 0: RETURN 
  294. 8991 P$ = "DO YOU WANT TO QUIT? (Y OR N)":PE = 1:V = 24: GOSUB 6400: IF   NOT AN  THEN PE = 0:QT = 0: RETURN 
  295. 8993 PE = 0: IF P(0)  THEN P$ = "DON'T YOU WANT TO FINISH THIS HAND?": VTAB 24: HTAB 3: PRINT P$: GET QK$: ON QK$ = "N" GOTO 15030: ON QK$ = "n" GOTO 15030:QT = 1: VTAB 24: HTAB 1: PRINT  SPC( 40);: RETURN 
  296. 8994  GOTO 15000
  297. 8998  REM THE BEGINNING OF THE PROGRAM
  298. 8999  REM SET HI-RES 1, FULL SCREEN. DO ALL THE DIMS
  299. 9000  HIMEM: 38400: DIM C%(14,7),C(2,1,5),SH(13),S%(1,5),SC$(15),SC(15),SU$(4),FI$(8): HGR : POKE  -16302,0: SCALE= 1
  300. 9009  REM ML SUBROUTINE ADDRESSES
  301. 9010 DECK = 4288:SNAP = 4399:TITLE = 3328:BOARD = 3331:SO =  PEEK(SNAP)
  302. 9019  REM DRAW THE BOARD, AND THE DECK ABOVE IT
  303. 9020  GOSUB 8960:X = 245:Y = 80: GOSUB 24: FOR I = 0 TO 12: READ SH(I): NEXT : FOR I = 0 TO 12:X = 9 +I *19:Y = 32:VA = I +1:SU = SH(I): GOSUB 23: NEXT : DATA 4,3,1,2,4,3,1,2,4,3,1,2,4
  304. 9029  REM PUT "CRIBBAGE" AND SIGNATURE ON SCREEN
  305. 9030  CALL TITLE: VTAB 1: HTAB 1: PRINT "Cards & program by": HCOLOR= 7: DRAW 2 AT 140,7: DRAW 2 AT 141,7: DRAW 3 AT 205,7: DRAW 3 AT 206,7: VTAB 3: PRINT  CHR$(96);"?' for help"
  306. 9049  REM READ DATA & GET PLAYER NAME
  307. 9050 V = 24: GOSUB 30000: GOTO 12000
  308. 9056  IF TS  THEN TS = 0: GOTO 9065
  309. 9060  GOSUB 8840
  310. 9065 DL = (N$ = "I")
  311. 9069  REM SHUFFLE AND DEAL
  312. 9070  GOSUB 8920:X = 245:Y = 80: GOSUB 22: FOR I = 0 TO 5:VA =  PEEK(DECK +2 *I): GOSUB 8940:C(1 -DL,0,I) = VA:C(1 -DL,1,I) = SU:VA =  PEEK(DECK +2 *I +1): GOSUB 8940:C(DL,0,I) = VA:C(DL,1,I) = SU: NEXT 
  313. 9080  FOR I = 0 TO 5:M = 99: FOR J = I TO 5: IF C(1,0,J) <M  THEN M = C(1,0,J):K = J
  314. 9090  NEXT :J = C(1,0,K):C(1,0,K) = C(1,0,I):C(1,0,I) = J:J = C(1,1,K):C(1,1,K) = C(1,1,I):C(1,1,I) = J: NEXT 
  315. 9100  FOR I = 0 TO 5:X = 3 +40 *I: FOR J = 0 TO 1:Y = 32 +96 *((DL +J) = 1): IF Y = 128  THEN VA = C(1,0,I):SU = C(1,1,I): GOSUB 23: GOTO 9120
  316. 9110  GOSUB 24
  317. 9120  NEXT : NEXT :X = 245: GOSUB 21:CY = Y:DL = 1 -DL:PL = DL:P(0) = 1
  318. 9129  REM LET PTG LAY-OFF HIS CARDS
  319. 9130  GOSUB 550:C$ =  CHR$(8) + CHR$(21) +"SWD?/ L": POKE 49168,0: FOR I = 0 TO 5:SH(I) = 0: NEXT :HO = 0
  320. 9139  REM LET PLAYER LAY-OFF HIS CARDS
  321. 9140  GOSUB 8990:K = KP: FOR P = 1 TO  LEN(C$): IF K =  ASC( MID$ (C$,P,1))  THEN K = P:P = 99
  322. 9150  NEXT : ON K GOSUB 8670,8670,8810,8790,8770,8700,8700,8640,8580: GOTO 9140
  323. 9159  REM GET STARTER
  324. 9160 VA =  PEEK(DECK +12): GOSUB 8940:SV = VA:SS = SU:X = 245:Y = 80: GOSUB 23: FOR I = 1 TO 13:SH(I) = 0: NEXT : IF VA = 11  THEN P$ = "TWO FOR HIS HEELS":S = 2: GOSUB 8500
  325. 9169  REM PLAY COMMAND LOOP
  326. 9170 X = 40 *B +3:Y = 128: GOSUB 21:HO = 0:NR = 4:PL = 1 -PL:C$ =  LEFT$(C$,7) +"PG" + CHR$(13):GO =  -1
  327. 9200 P$ = T$: GOSUB 40: IF   NOT PL  THEN  GOSUB 800:PL = 1:P$ = T$: GOSUB 40
  328. 9205  IF   NOT TS  THEN P$ = "YOUR LEAD.": GOSUB 40
  329. 9210  IF GO = 1  THEN PL = 0: GOTO 9200
  330. 9220  IF   NOT NC  AND GO =  -1  THEN GO = 1:PL = 0: GOTO 9200
  331. 9230  IF   NOT NC  THEN  GOSUB 8300:PL = 0: GOTO 9200
  332. 9240 PL = 1: GOSUB 8990:K = KP: FOR P = 1 TO  LEN(C$): IF K =  ASC( MID$ (C$,P,1))  THEN K = P:P = 99
  333. 9250  NEXT : ON K GOSUB 8670,8670,8810,8790,8770,8700,8700,7000,8300,8300: GOTO 9200
  334. 9299  REM SHOW CARDS AND SCORE THEM
  335. 9300  POP : GOSUB 8370:TS = 0:T$ = " ": FOR I = 0 TO 1: FOR J = 0 TO 3:C(I,0,J) =  ABS(C(I,0,J +2)):C(I,1,J) = C(I,1,J +2): NEXT : NEXT 
  336. 9310 PL = 1 -DL:P = PL:OY = 32 +96 *PL: GOSUB 6900:PL = DL:OY = 32 +96 *PL:P = PL: GOSUB 6900:P = 2: GOSUB 6900: POKE SN -2,7:CP = 0
  337. 9320 P$ = "I": IF N$ = "I"  THEN P$ = "YOU"
  338. 9330 N$ = P$: ON QT +1 GOTO 9070,15000
  339. 9999  REM THE GAME HAS BEEN WON
  340. 10000 P$ = "We have a winner!!!": POKE 49168,0: FOR I = 0 TO 2: POKE 768,99: POKE 769,0: POKE 770,97: POKE 771,255: CALL 3973: NEXT : GOSUB 30: ONERR  GOTO 10020
  341. 10010  POP : GOTO 10010
  342. 10020  POKE 216,0
  343. 10030 S%(PL,2) = 121:P$ = "I BEAT YOU":N$ = "YOU": IF PL  THEN P$ = "YOU BEAT ME":N$ = "I"
  344. 10040 L = 0: IF S%(1 -PL,2) <61  THEN P$ = "I LURCHED YOU!!!":L = 1: IF PL  THEN P$ = "YOU LURCHED ME!!!"
  345. 10050 P$ = P$ +", 121 TO " + STR$(S%(1 -PL,2)) +".": POKE 49168,0: GOSUB 30
  346. 10060  FOR I = 0 TO L
  347. 10070 S%(PL,0) = S%(PL,0) +1:S%(PL,0) = S%(PL,0) -(S%(PL,0) = 11):S%(PL,3) = S%(PL,3) +121 -S%(1 -PL,2):S%(PL,4) = S%(PL,4) +1:Y = 103:
  348. 10075 X = (S%(PL,0) -1) *8 +4:X = (240 -X) *(PL = 1) +X *(PL = 0): XDRAW 7 AT X,Y:X = X +8 *((PL = 1) -(PL = 0)): IF X >3  AND X <237  THEN  XDRAW 7 AT X,Y
  349. 10080  NEXT : HCOLOR= 4:SO = 0: GOSUB 8970:SO =  PEEK(SN):S%(0,1) = 0:S%(0,2) = 0:S%(1,1) = 0:S%(1,2) = 0:TS = 0:T$ = " ":X = 245:Y = 80: GOSUB 20: POKE 49168,0
  350. 10090  IF S%(0,0) = 10  THEN P$ = "I HAVE WON THE MATCH": GOSUB 30:S%(0,0) = 0:S%(0,5) = S%(0,5) +1: HCOLOR= 4: GOSUB 8980:S%(1,0) = 0
  351. 10100  IF S%(1,0) = 10  THEN P$ = "YOU HAVE WON THE MATCH": GOSUB 30:S%(1,0) = 0:S%(1,5) = S%(1,5) +1: HCOLOR= 4: GOSUB 8980:S%(0,0) = 0
  352. 10110  GOSUB 10120:CP = 0: ON QT +1 GOTO 9065,15000
  353. 10119  REM DISPLAY GAME STATS
  354. 10120 V$ =  CHR$(124):P$ = V$ +"  Points " +V$ +"  Games  " +V$ +" Matches " +V$ +"         ": VTAB 5: HTAB 1: PRINT P$: VTAB 17: PRINT P$;
  355. 10130 P$ = "$/////////*/////////*/////////%         ": PRINT P$: VTAB 21: PRINT P$: VTAB 6: PRINT P$: VTAB 9: PRINT P$:V$ = V$ +"         "
  356. 10140 P$ = V$ +V$ +V$ +V$: VTAB 7: PRINT P$;P$: VTAB 10: PRINT P$: VTAB 19: PRINT P$;P$: VTAB 22: PRINT P$
  357. 10150  FOR V = 8 TO 20  STEP 12: VTAB V: HTAB 4: PRINT  CHR$(120);: HTAB 9: PRINT "1";: HTAB 13: PRINT  CHR$(120);: HTAB 18: PRINT "25";: HTAB 23: PRINT  CHR$(120);: HTAB 27: PRINT "500";: HTAB 34: PRINT "Total  ": NEXT 
  358. 10160 V$ = "         ": FOR P = 0 TO 1:P$ = V$ + STR$(S%(P,3)): VTAB 7 +12 *P: HTAB 4: PRINT  RIGHT$(P$,6);:P$ = V$ + STR$(S%(P,4)): HTAB 15: PRINT  RIGHT$(P$,5);
  359. 10170 P$ = V$ + STR$(S%(P,5)): HTAB 26: PRINT  RIGHT$(P$,4): VTAB 10 +12 *P: HTAB 4:P$ = V$ + STR$(S%(P,3)): PRINT  RIGHT$(P$,6);:P$ = V$ + STR$(S%(P,4) *25): HTAB 13: PRINT  RIGHT$(P$,7);
  360. 10180 P$ = V$ + STR$(S%(P,5) *500): HTAB 23: PRINT  RIGHT$(P$,7);:P$ = V$ + STR$(S%(P,3) +S%(P,4) *25 +S%(P,5) *500): HTAB 33: PRINT  RIGHT$(P$,8): NEXT 
  361. 10190 T = S%(0,3) +S%(0,4) *25 +S%(0,5) *500:S = S%(1,3) +S%(1,4) *25 +S%(1,5) *500
  362. 10200 P$ = V$: IF T >S  THEN P$ = P$ +"+"
  363. 10210 P$ = P$ + STR$(T -S): VTAB 4: HTAB 32: PRINT  RIGHT$(P$,9)
  364. 10220 P$ = V$: IF S >T  THEN P$ = P$ +"+"
  365. 10230 P$ = P$ + STR$(S -T): VTAB 23: HTAB 32: PRINT  RIGHT$(P$,9)
  366. 10240 P(0) = (P < >2): POKE 49168,0:V = 24:P$ = "PRESS A KEY": GOSUB 40: GOSUB 8990:P$ = " ": GOSUB 40
  367. 10250  FOR V = 5 TO 10:P$ = " ": GOSUB 40: NEXT : FOR V = 17 TO 22: GOSUB 40: NEXT :V = 24
  368. 10260  RETURN 
  369. 11999  REM HAS PLAYED PLAYED BEFORE? GET PLAYERS NAME, THEN CHECK THE SCORES FILE.
  370. 12000 P$ = "HAVE WE PLAYED BEFORE? (Y OR N)": POKE 49168,0
  371. 12010  GOSUB 6400: POKE 0,1: POKE 1,0: POKE 2,1: CALL 4913:P$ = "ENTER YOUR NAME:":Y = 2 -AN
  372. 12025 V = 23: GOSUB 40:V = 24:NM$ = "":T = 0
  373. 12030 P$ = NM$: GOSUB 40:PE = 1: GOSUB 8990:P = KP: IF P = 8  THEN T = T -1:T = T +(T <0): IF   NOT T  THEN NM$ = "": GOTO 12030
  374. 12035  IF P = 8  AND T  THEN NM$ =  LEFT$(NM$,T): GOTO 12030
  375. 12040  IF P = 13  AND T  THEN V = 23:P$ = " ": GOSUB 40:V = 24: GOSUB 40: GOTO 14000
  376. 12050  IF P >90  OR (P <65  AND P < >32)  THEN 12030
  377. 12055  IF P = 32  AND   NOT T  THEN 12030
  378. 12060 T = T +1: IF T = 11  THEN T = 10: GOTO 12030
  379. 12070 NM$ = NM$ + CHR$(P): GOTO 12030
  380. 13999  REM LOAD THE CRIBBAGE.SCORES DATA TO CONTINUE A SAVED MATCH
  381. 14000  IF  RIGHT$(NM$,1) = " "  THEN NM$ =  LEFT$(NM$, LEN(NM$) -1): GOTO 14000
  382. 14003  ONERR  GOTO 14100
  383. 14005  GOSUB 16000: PRINT D$"READ"CB$",R0": INPUT RN: IF   NOT RN  THEN Y = 2: GOTO 14020
  384. 14010 RC = 0: FOR I = 1 TO RN: PRINT D$"READ"CB$",R"I: INPUT RN$: IF RN$ = NM$  THEN RC = I:I = RN
  385. 14015  NEXT 
  386. 14020  GOSUB 16010: IF RC  AND Y = 2  THEN P$ = "NAME IN USE. USE ANOTHER NAME:": GOTO 12025
  387. 14022  IF   NOT RC  AND Y = 1  THEN P$ = "I COULDN'T FIND YOU!":V = 23: GOSUB 40:V = 24: GOTO 12000
  388. 14025  IF   NOT RC  THEN RC = RN +1: GOTO 9056
  389. 14027  GOSUB 16000: PRINT D$"READ"CB$",R"RC
  390. 14030 TS = 0: FOR I = 0 TO 1: FOR J = 0 TO 5: INPUT S%(I,J):TS = TS +S%(I,J): NEXT : NEXT : INPUT DL,PL,WS,SO,DD: INPUT N$: GOSUB 16010
  391. 14050 Y = 103:X =  -4 +8 *S%(0,0): IF X >3  THEN  XDRAW 7 AT X,Y
  392. 14060 X = 244 -8 *S%(1,0): IF X <237  THEN  XDRAW 7 AT X,Y
  393. 14070 T = PL: FOR PL = 0 TO 1: FOR I = 1 TO 2:O = S%(PL,I): GOSUB 8540: NEXT : NEXT :PL = T
  394. 14080  GOSUB 10120:P$ = "I HAVE " + STR$(S%(0,2)) +", YOU HAVE " + STR$(S%(1,2)) +".": GOSUB 40: GOTO 9056
  395. 14099  REM READ ERROR
  396. 14100 P$ = "READ": GOSUB 16020: ON AN +1 GOTO 15030,12000
  397. 14999  REM SAVE THE GAME
  398. 15000  ONERR  GOTO 15100
  399. 15005  GOSUB 16000: PRINT D$"WRITE"CB$",R"RC
  400. 15010  PRINT NM$: FOR I = 0 TO 1: FOR J = 0 TO 5: PRINT S%(I,J): NEXT : NEXT : PRINT DL: PRINT PL: PRINT WS: PRINT SO: PRINT DD: PRINT N$
  401. 15020  IF RC >RN  THEN  PRINT D$"WRITE"CB$",R0": PRINT RC
  402. 15030  PRINT D$"CLOSE": PRINT : PRINT "<CTRL-0x04>RUNCRIBBAGE.HIGH"
  403. 15099  REM WRITE ERROR
  404. 15100 P$ = "WRITE": GOSUB 16020: ON AN +1 GOTO 15030,15000
  405. 15999  REM SET-UP TO OPEN FILE
  406. 16000 D$ =  CHR$(4):CB$ = "CRIBBAGE.SCORES": PRINT : PRINT D$"CLOSE": PRINT D$"OPEN"CB$",L128": RETURN 
  407. 16009  REM CLOSE FILE
  408. 16010  PRINT D$"CLOSE": POKE 216,0: RETURN 
  409. 16019  REM HANDLE ERROR
  410. 16020  POKE 216,0:P$ = "DISK " +P$ +" ERROR - TRY AGAIN? (Y OR N)": GOSUB 16010: GOTO 6400
  411. 29990  END 
  412. 29998  REM READ THE ARRAYS
  413. 29999  REM THE SCORING DATA. HAS THE STRING DISPLAYED AND THE WORTH OF THE HAND
  414. 30000  DATA FIFTEEN,2
  415. 30001  DATA FIFTEENS,0
  416. 30002  DATA DOUBLE PAIR ROYAL,12
  417. 30003  DATA QUADRUPLE RUN OF THREE,16
  418. 30004  DATA TRIPLE RUN OF THREE,15
  419. 30005  DATA PAIR ROYAL,6
  420. 30006  DATA DOUBLE RUN OF FOUR,10
  421. 30007  DATA RUN OF FIVE,5
  422. 30008  DATA DOUBLE RUN OF THREE,8
  423. 30009  DATA RUN OF FOUR,4
  424. 30010  DATA RUN OF THREE,3
  425. 30011  DATA PAIR,2
  426. 30012  DATA FLUSH,5
  427. 30013  DATA FOUR FLUSH,4
  428. 30014  DATA ...AND ONE FOR HIS NOB,1
  429. 30020  FOR I = 1 TO 15: READ SC$(I),SC(I): NEXT 
  430. 30049  REM THE COMBINATIONS OF 6 CARDS TAKEN 4 AT A TIME. (NEEDED FOR PTG TO DETERMINE HIS BEST HAND.) THE FIRST 4 ARE KEPT, THE LAST 2 ARE LAYED-AWAY.
  431. 30050  DATA 0,1,2,3,4,5
  432. 30051  DATA 0,1,2,4,3,5
  433. 30052  DATA 0,1,2,5,3,4
  434. 30053  DATA 0,1,3,4,2,5
  435. 30054  DATA 0,1,3,5,2,4
  436. 30055  DATA 0,1,4,5,2,3
  437. 30056  DATA 0,2,3,4,1,5
  438. 30057  DATA 0,2,3,5,1,4
  439. 30058  DATA 0,2,4,5,1,3
  440. 30059  DATA 0,3,4,5,1,2
  441. 30060  DATA 1,2,3,4,0,5
  442. 30061  DATA 1,2,3,5,0,4
  443. 30062  DATA 1,2,4,5,0,3
  444. 30063  DATA 1,3,4,5,0,2
  445. 30064  DATA 2,3,4,5,0,1
  446. 30070  FOR I = 0 TO 14: FOR J = 0 TO 5: READ C%(I,J): NEXT : NEXT 
  447. 30099  REM THE RANKING OF SUITS. USED ONLY TO DETERMINE WINNER OF DEAL WHEN BOTH PLAYERS DRAW THE SAME RANK CARD
  448. 30100  DATA CLUBS,DIAMONDS,HEARTS,SPADES
  449. 30110  FOR I = 1 TO 4: READ SU$(I): NEXT 
  450. 30149  REM THE CARDINAL STRINGS FOR THE POSSIBLE 'FIFTEENS'
  451. 30150  DATA TWO,FOUR,SIX,EIGHT,TEN,TWELVE,FOURTEEN,SIXTEEN
  452. 30160  FOR I = 1 TO 8: READ FI$(I): NEXT 
  453. 40000  RETURN